package com.dragon.backstage.service;

import com.dragon.backstage.domain.param.user.UserAddParam;
import com.dragon.backstage.domain.param.user.UserAuthRoleAddBatchParam;
import com.dragon.backstage.domain.param.user.UserAuthRoleParam;
import com.dragon.backstage.domain.param.user.UserChangeStatusParam;
import com.dragon.backstage.domain.param.user.UserEditParam;
import com.dragon.backstage.domain.param.user.UserParam;
import com.dragon.backstage.domain.vo.user.UserAuthRoleVo;
import com.dragon.backstage.domain.vo.user.UserDetailVo;
import com.dragon.backstage.domain.vo.user.UserVo;
import com.dragon.common.domain.vo.PaginationVo;
import com.dragon.common.utils.AjaxResult;
import com.dragon.interfaces.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 用户信息表 服务类
 * </p>
 *
 * @author dragon
 * @since 2024-07-31 17:42:19
 */
public interface UserService extends IService<User> {

    /**
     * 用户信息缓存初始化
     *
     * @param userId 用户ID
     */
    void userInfoCacheInit(long userId);

    /**
     * 用户信息缓存初始化
     *
     * @param userId     用户ID
     * @param forcedInit 是否强制初始化
     */
    void userInfoCacheInit(long userId, boolean forcedInit);

    /**
     * 获取用户昵称
     *
     * @param account 账号
     * @return 用户昵称
     */
    String getNickNameByAccount(String account);

    /**
     * 用户列表
     *
     * @param param 请求参数
     * @return 用户列表
     */
    AjaxResult<PaginationVo<UserVo>> userList(UserParam param);

    /**
     * 用户详情
     *
     * @param userId 用户ID
     * @return 用户详情
     */
    AjaxResult<UserDetailVo> userDetail(Long userId);

    /**
     * 添加用户
     *
     * @param param 请求参数
     * @return 添加结果
     */
    AjaxResult<Void> addUser(UserAddParam param);

    /**
     * 编辑用户
     *
     * @param param 请求参数
     * @return 编辑结果
     */
    AjaxResult<Void> editUser(UserEditParam param);

    /**
     * 删除用户
     *
     * @param userId 用户ID
     * @return 删除结果
     */
    AjaxResult<Void> deleteUser(Long userId);

    /**
     * 更改用户状态
     *
     * @param param 请求参数
     * @return 更改结果
     */
    AjaxResult<Void> changeStatus(UserChangeStatusParam param);

    /**
     * 授权角色列表
     *
     * @param param 请求参数
     * @return 授权角色列表
     */
    AjaxResult<PaginationVo<UserAuthRoleVo>> authRoleList(UserAuthRoleParam param);

    /**
     * 批量添加授权角色
     *
     * @param param 请求参数
     * @return 批量添加结果
     */
    AjaxResult<Void> addAuthRoleBatch(UserAuthRoleAddBatchParam param);

}
